import { createRouter, createWebHistory, } from 'vue-router'
import { useUserStore } from '../store/user'
import { ElMessage } from "element-plus";
import type { RouteRecordRaw } from 'vue-router'
import i18n from '../locales' // 导入 i18n 实例而不是 useI18n 函数
const routes: Array<RouteRecordRaw> = [
  {
    path: '/',
    name: 'HomeView',
    component: () => import('@/views/HomeView.vue'),
    meta: {
      requiresAuth: false
    }
  },

  // {
  //   path: '/contact',
  //   redirect: '/contact/about', // 重定向到默认子路由
  //   meta: {
  //     requiresAuth: false,
  //   },
  //   children: [
  //     {
  //       path: 'about',
  //       name: 'ContactAbout',
  //       component: () => import('@/views/contact/aboutView.vue'),
  //       meta: {
  //         requiresAuth: false,
  //       },
  //     },
  //     {
  //       path: 'service',
  //       name: 'ContactService',
  //       component: () => import('@/views/contact/serviceView.vue'),
  //       meta: {
  //         requiresAuth: false,
  //         DevelopingFeature: false
  //       },
  //     },
  //   ]
  // },
  
  // 添加 404 页面路由
  // {
  //   path: '/:pathMatch(.*)*', // 匹配所有未定义的路由
  //   name: 'NotFound',
  //   component: () => import('@/views/error/NotFoundView.vue'), // 替换为你的 404 页面组件路径
  //   meta: {
  //     requiresAuth: false,
  //   },
  // },
]
// 创建路由实例
const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes
})

// 全局前置守卫
router.beforeEach(async (to, from, next) => {
  const userStore = useUserStore()
  const requiresAuth = to.meta.requiresAuth as boolean
  const requiresNormalStatus = to.meta.requiresNormalStatus as boolean
  const hideForAuth = to.meta.hideForAuth as boolean
  const DevelopingFeature = to.meta.DevelopingFeature as boolean
  const isHomePage = to.path === '/'
  const isFromLoginPage = from.path === '/login'
  console.log(from,'from')
  try {
    // 等待检查登录状态完成
    const isLoggedIn = await userStore.checkLogin()
    
    // 检查用户状态
    const userStatus = userStore.currentUser?.status
    
    // 如果用户状态为"禁用"，直接退出登录
    if (isLoggedIn && userStatus === '已禁用') {
      await userStore.logout()
      ElMessage.error('您的账号已被禁用，请联系管理员')
      next({ path: '/login' })
      return
    }
    
    // 如果用户已登录且尝试访问登录/注册页面，重定向到首页
    if (hideForAuth && isLoggedIn) {
      next({ path: '/' })
      return
    }
    
    // 如果用户刚从登录页面登录成功，且状态不正常，且不是访问首页，重定向到首页
    if (isLoggedIn && isFromLoginPage && !isHomePage && userStatus && userStatus !== '正常') {
      ElMessage.warning(`您的账号状态为${userStatus}，请联系管理员`)
      next({ path: '/' }) // 跳转到首页
      return
    }
    
    // 开发中功能
    if (DevelopingFeature) { 
      ElMessage.warning(i18n.global.t('common.developing'))
      return
    }
    
    // 如果路由需要认证
    if (requiresAuth) {
      if (isLoggedIn) {
        // 如果路由需要正常状态且用户状态不正常，阻止访问并提示
        if (requiresNormalStatus && userStatus && userStatus !== '正常') {
          ElMessage.error(`您的账号状态为${userStatus}，请联系管理员`)
          next(false) // 阻止导航
          return
        }
        
        next() // 已登录且状态正常或不需要状态检查，继续导航
      } else {
        // 未登录，重定向到登录页面，并保存原目标路由
        next({
          path: '/login',
          query: { redirect: to.fullPath }
        })
      }
    } else {
      // 不需要认证的路由，直接通过
      next()
    }
  } catch (error) {
    console.error('Failed to check login status:', error)
    // 发生错误时重定向到登录页面
    if (requiresAuth) {
      next({
        path: '/login',
        query: { redirect: to.fullPath }
      })
    } else {
      next()
    }
  }
})

export default router